package vengadores;

/**
 *Clase utilizada para animar todos los objetos que sean menús.
 * Se implementó un objeto Runnable más, ya que sen necesitaba otro tipo de animación para los menús.
 * @author Felipe Donato Arrazola Gómez
 * @author Jorge de Jesús Tinoco Huesca
 * @author Arturo Ayala Tello
 */
public class AnimadorMenu implements Runnable {

    private Menu menu;  //menu deberia ser una interfaz.
    private boolean corriendo; //cuando corriendo sea true, se ejecutará Run.
    private int FPS = 29;
    private final int RETARDO = 1000/FPS; //FPS = Frames Por Segundo.
    private Thread thread;
    /**
     *Constructor de la clase AnimadorMenu
     * @param jgo Es cualquier menú que se vaya a animar.
     */
    public AnimadorMenu(Menu jgo){
        this.menu = jgo;
    }
    /**
     * Método para obtener la opción seleccionada por el jugador.
     * @return el indice de la opción seleccionada.
     */
    public int checarIndice(){
        int tipo = menu.getTipo();
        int indice = menu.fondoMenu.getX()/240;
        if (tipo == Menu.PRINCIPAL){
            if(indice == -7){
                indice = 0;
            }else if(indice<0){
                indice *= -1;
            }else if(indice > 0){
                indice = 7 - indice;
            }else{
                indice = 0;
            }
        }else if (tipo == Menu.SELECCION){
            if(indice == -2){
                indice = 0;
            }if(indice<0)
                indice *= -1;
            else if(indice >0)
                indice = 2 - indice;
            else if(indice == 2)
                indice = 0;
        }else{
            indice = 0;
        }
        return indice;
    }

    /**
     * Método que hace que se anime el juego. Usa un ciclo para actualizar el estado del juego FPS veces por segundo.
     */
    public void run() {

        corriendo = true;
        while(corriendo){
            //Indicarle al menu que se actualice. Que mueva los objetos de acuerdo al tiempo o entrada.
            //Actualizar pantalla. En resumen, actualizar objetos, posición, dibujar todo.
            menu.checarTeclas();
            if ((menu.movimientoIzq || menu.movimientoDer)){
                menu.actualizar();
                if (menu.fondoMenu.getX()%menu.ANCHO == 0){
                    menu.indice = this.checarIndice();
                    menu.movimientoIzq = false;
                    menu.movimientoDer = false;
                }
            }
            if (corriendo){
                menu.dibujar();
                try {

                    Thread.sleep(RETARDO);
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                }
            }

        }
        thread = null;
        menu = null;
    }

    /**
     * Método que crea el thread y lo inicializa.
     */
    public void iniciar(){
        thread = new Thread(this);
        thread.start();  //Llama de alguna forma al metodo run.
    }

    /**
     * Método que pone termina el animador del menú.
     */
    public void terminar(){
        corriendo = false;
    }
}

